影像縫接主要目的是增大視角(Field of View)和提高解析度,將數個相機拍攝的圖像組成一張圖像,這個過程包含圖像校正(Image Calibration)和圖像縫接。
為了能獲得無縫拼接的效果,必須使用混合演算法(Blending Algorithm),使不同相機的亮度、色彩、曝光程度能夠同步。
影像縫接種類
目前影像縫接技術包含有固定線(Fixed Line)縫接、線性(Linear)縫接、動態縫線(Dynamic Seam Line)拼接。圖1到圖3是它們產生的效果。
固定線縫接是最簡單的方法,就是將兩張圖像直接拼接在一起。在圖1中,可以清楚看到在兩圖像交接處有一條直線存在,所以它不是無縫拼接。



線性縫接是將兩張圖像的邊緣相似處互相重疊,使用線性混合演算法讀取一個alpha表,並將重疊處變得透明,這樣能夠產生從左圖像逐漸變成右圖像的效果,且沒有明顯的接縫線存在。但如果被拍攝的物體是在運動中,則該物體在產出的圖像中就會變得很模糊。
動態縫線拼接技術適合用於空拍機拍攝到的多張圖像之縫接。它是使用最佳縫線搜尋演算法(Best Seam Line Searching Algorithm),以目前輸入的圖像不斷在重疊處搜尋最佳的縫線。一個像素和周邊像素的相似度越高,則其重要性或能量就越低。能量最低者就是最佳的縫線。移除或合併這些縫線附近重複的像素(Pixel),就能產生柔和且自然的拼接效果,這種拼接方法稱為最小誤差邊緣切割(Minimal Error Boundary Cut)或圖割(Graphy Cut)。不過,它的缺點是在重疊區會出現視訊波動,而且由於必須搜尋每張圖像的最佳縫線,運算耗時,所以此搜尋演算法不能太過複雜。
設計一個3D圖像縫接系統大致可以區分成下面七個流程:
3D圖像縫接系統硬體設計
圖4是一個3D圖像縫接系統的硬體架構,必須注意:

・透鏡
要使用同一類型的透鏡,焦距和光圈(Aperture)要相同;每個透鏡的視角要相同且夠大;每個透鏡的視角須互相交叉;透鏡必須具有低失真率。
・影像感測器(Sensor)
要使用同一類型的感測器, 解析度要一樣;自動曝光(AE) 和自動白平衡(AWB)須能同步調整;曝光時間要一樣;其輸出原始的圖像資料。
・影像輸入器VIN
接收從影像感測器傳送來的原始資料。
・IDSP
負責處理從VIN傳送來的原始資料,包含去雜訊、調整亮度等;輸出YUV格式的訊號。
・VDSP
接收從IDSP傳送來的YUV訊號,進行視訊串流編碼(Video Stream Encoding)。
・ARM
接收從IDSP傳送來的YUV訊號,對圖像進行校正和縫接的運算,最後將運算結果傳送到IDSP。
機構設計影響視角/視差
圖像縫接至少需要兩個相機,但視角不正確就容易產生視差(Parallax),如圖5所示。所謂視差是指從兩個不同位置觀察同一個物體時,此物體在視野中的位置變化與差異。物體太靠近相機,也會造成嚴重的失真。只要有一台相機輸出的圖像失真,縫接系統就失效了。所以必要時,須為每一台相機各別設計能提高視角和消除視差的輔助機構。


軟體架構輔助圖像校正/縫接
包含應用層、驅動層和程式庫(Library)。
應用層
・使用者圖形介面程式
輸入圖像校正或縫接所必須的參數。
・圖像擷取程式
讀取目前場景YUV資料並傳送輸出/輸入控制命令給驅動程式,經過虛擬對實體的位址轉換,將圖像的記憶體位址回傳到應用層。
・圖像校正程式
將YUV圖像位址傳送到校正程式庫進行校正。然後傳送校正參數到校正程式庫,並接收從校正程式庫傳來的偏移值(Shifting Value)。
・縫接程式
將YUV圖像位址傳送到縫接程式庫進行縫接。然後傳送縫接參數到縫接程式庫,並接收更新的alpha表資料。
驅動層用來和IDSP溝通。它是應用層和IDSP的橋樑。它將alpha表資料複製到特定的記憶體中。一旦alpha表資料被更新,它會等待IDSP來處理。供縫接分析用的YUV資料位址透過中斷通知,回傳給應用層。
程式庫
・校正
從應用層接收圖像位址,然後從應用層接收校正參數,對左右圖像進行運算,得出偏移值,最後將此偏移值傳送到應用層。
・縫接
從應用層接收圖像位址,然後從應用層接收縫接參數,最後對左右圖像進行運算,得出縫線,藉此產出更新的alpha表。
校正/縫接可獨立進行
校正的圖像是來自相機,所以是以目前的場景來做校正。這校正對圖像進行預處理(Pre-Processing),包含自動曝光和自動白平衡的調整等。縫接與校正是互相獨立進行的。校正模式為圖像提供伸縮、旋轉和偏移因數(Shift Factor)。縫接時,輸入圖像也是來自相機。縫接使用校正模式所產生的校正參數對圖像進行預處理。之後,搜尋目前圖像的最佳縫線並產生新的alpha表。
設定/重建Linux核心
在後端電腦重建Linux核心前,需先完成下列的設定和選定:
・按照DSP的規格,設定VIN通道數量,例如:2個、4個、6個或8個。
・選用縫接程式庫。
・選用OpenCV的core、imgproc、imgcodecs、core misc程式庫。重建Linux核心後,這些程式庫必須存在於主檔案系統(Rootfs)中。
・由於使用圓形校正圖案,必須下載和安裝AprilTag標籤圖程式庫。這程式庫也必須存在於主檔案系統中。
針孔型光圈Pinhole Lens/方位Pose之校正
先在後端電腦內安裝OpenCV和Ceres Solver軟體。Ceres Solver是一種C++程式庫,可以幫助解決複雜的最佳化問題。
使用圓形校正圖案,至少拍攝10張圖像。而且每個圓圈必須有15到20個像素大小。如此,所有的圓圈圖案都可以存在同一張圖像內。
要注意拍攝的位置,圖像內不要有傾斜的圓圈圖案。若想快速完成校正作業,一張圖像內的圓圈圖案必須增加。
將拍攝到的全部圖像複製到後端電腦,使用OpenCV和上述的程式庫進行運算。最後將OpenCV運算的結果複製到開發板上,即可進行縫接作業。校正光圈所需的圖像較多,所以最好在後端電腦進行。校正方位所需的圖像不多,若光圈校正之前就已經完成,並且在開發板上已經有此相機的內部參數(Intrinsic Parameter),為節省時間,可以在開發板上使用既有的內部參數進行方位校正。此時,上述在後端電腦內安裝OpenCV軟體和Ceres Solver、AprilTag程式庫的步驟就可以省略。
當校正完成後,校正程式庫將校正參數傳到應用層,確認校正的結果是否是每個通道的最佳偏移值。
藉由縫接作業拼貼完美圖像
縫接作業可以區分成下面幾個程序:預覽、消除扭曲(Dewarp)、改變偏移、縫製或混合。為求無縫拼接,必須動態調整相關參數,以得出每張圖像的最佳縫線。縫接前,必須先將重疊區域的畫布(Canvas)設定好。若輸出是水平圖像就設定成水平組態,若輸出是垂直圖像就設定成垂直組態。還要選定動態搜尋縫線的方法:動態規劃(DP)或圖割。這些需求和步驟都可以設計成縫接程式,最後得出無縫拼接的完美圖像,而且是即時的串流視訊。
3D縫接技術應用
3D相機的主要功能除了可以得出深度,用來測距、辨識臉部或物體以外,3D相機的縫接技術還可以應用到視訊穩定(Video stabilization)、視訊摘要(Video summarization)、視訊壓縮、視訊去背(Video matting)、環場全景(Panorama)的生成等領域,是很具潛力的新科技。
近年來,由於人工智慧的進步,新的演算法、晶片硬體的不斷創新,也推廣了3D縫接技術的應用。